#ifndef STDIO_H
#define STDIO_H

#include"os_type.h"
#include"list.h"

#define MAX_BUFFER_SIZE 1000
typedef struct{
    char name[20];
    uint32 mark_code[3];
    uint32 break_code[2];
    ListItem tag;
}KEY;
class STDIO{
private:
    uint8 *screen;
    char buffer[2*80*MAX_BUFFER_SIZE];//250行缓存,一行80字符，字符颜色2
    int curRow;//与缓冲区相对行，最大行
    uint32 keyPressing[3];
    void rollUp();//滚屏
    void rollDown();
    List functionKeyPressed;//按下的功能键
public:
    STDIO();
    void initialize();//初始化函数
    void print(uint x,uint y,uint8 c,uint8 color);//打印字符c，颜色 color 到（x,y）
    void print(uint8 c,uint8 color);//打印字符c,颜色 color 到默认光标位置
    void print(uint8 c);//打印字符c，颜色默认到光标位置
    int print(const char* const str);
    void moveCursor(uint position);//移动光标到一维位置
    void moveCursor(uint x,uint y);//移动光标到二位位置
    uint getCursor();
    void clear(uint8 color=0x07);//清屏
    void handleKeyboard(uint32 scan_code);//处理扫描码
    void handleKey();
};
int printf(const char* const format,...);
#endif